package main

import (
	"fmt"
	"log"
	"math/rand"
	"time"

	"demo/es"
	"demo/handler"
	"demo/model"
)

func main() {
	// 加载默认词典
	if err := handler.Seg.LoadDict(); err != nil {
		log.Fatalf("加载词典失败: %v", err)
	}

	if err := es.InitClient(); err != nil {
		log.Fatalf("Elasticsearch 初始化失败: %v", err)
	}
	// 创建映射
	if err := es.CreateMapping(); err != nil {
		log.Fatalf("创建映射失败: %v", err)
	}

	// 批量生成 200 组测试数据
	var products []model.Product
	chineseMid := []string{"笔记本", "哇哈哈", "电脑", "手机", "零食", "饼干", "蛋糕", "酸奶", "苏打", "饮料",
		"电视", "冰箱", "洗衣机", "空调", "手表", "耳机", "相机", "路由器", "平板", "音箱",
		"洗发水", "沐浴露", "牙膏", "毛巾", "床单", "枕头", "杯子", "锅具", "刀具", "餐具"}
	chinesePrefixes := []string{"新款", "时尚", "潮流", "高端", "经典", "限量",
		"热销", "爆款", "特价", "促销", "旗舰", "尊享",
		"智能", "无线", "便携", "轻薄", "大容量", "节能"}
	chineseSuffixes := []string{"版", "款", "系列", "设计", "风格", "套装",
		"组合装", "礼盒", "家庭装", "旅行装", "升级版",
		"Pro", "Plus", "Max", "Lite", "Edition", "Edition"}
	engMid := []string{"hello", "test", "world", "apple", "chat", "huawei", "book", "pro", "mini",
		"smart", "max", "plus", "lite", "x", "ultra", "air", "one", "zero", "alpha",
		"beta", "elite", "core", "boost", "power", "tech", "gear", "flash", "speed"}

	for i := 0; i < 200; i++ {
		prefix := chinesePrefixes[rand.Intn(len(chinesePrefixes))]
		suffix := chineseSuffixes[rand.Intn(len(chineseSuffixes))]
		mid := chineseMid[rand.Intn(len(chineseMid))]
		eng := engMid[rand.Intn(len(engMid))]
		product := model.Product{
			Title:       fmt.Sprintf("%sTest%v Product %v %v %v", prefix, mid, eng, i+1, suffix),
			ProductId:   fmt.Sprintf("PROD%04d", i+1),
			ProductType: rand.Intn(3) + 1,                                                       // 随机生成产品类型 (1-3)
			SKUID:       fmt.Sprintf("SKU%04d", rand.Intn(10000)),                               // 随机生成 SKU ID
			Spec:        fmt.Sprintf("%dGB RAM, %dGB SSD", rand.Intn(32)+8, rand.Intn(512)+128), // 随机生成规格
			SupplierId:  rand.Int63n(1000) + 1,                                                  // 随机生成供应商 ID
			Supplier:    fmt.Sprintf("Supplier %d", rand.Intn(10)+1),                            // 随机生成供应商名称
			Barcode:     fmt.Sprintf("%012d", rand.Intn(1000000000000)),                         // 随机生成条形码
			CreatedAt:   time.Now(),
			UpdatedAt:   time.Now(),
			Status:      rand.Intn(2) + 1, // 随机生成状态 (1-2)
		}
		products = append(products, product)
	}

	// 批量创建产品
	productIDs, err := handler.BatchCreateProducts(products)
	if err != nil {
		log.Fatalf("批量创建产品失败: %v", err)
	}

	fmt.Println("创建成功，ID列表:", productIDs)

	////查询产品
	//for _, id := range productIDs {
	//	product, err := handler.GetProduct(id)
	//	if err != nil {
	//		log.Fatalf("查询产品失败: %v", err)
	//	}
	//	fmt.Printf("查询结果: %+v\n", product)
	//}
	res, total, err := handler.SearchProducts("智能Test零食 Product test 30 Pro", 0, 10)
	if err != nil {
		log.Fatalf("查询产品失败: %v", err)
	}
	fmt.Println(total)
	for _, re := range res {
		fmt.Println(re)
	}
}
